<?xml version="1.0" encoding="utf-8"?>
<!--
 | XSLT [Syntactic] Sugar v.0.2
 | 2012/05/02
 | Vladimir Romanovich <ibnteo@gmail.com>
 +-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" indent="yes" encoding="utf-8"/>

<xsl:template match="*|@*|text()|processing-instruction()|comment()">
  <xsl:copy>
    <xsl:apply-templates select="@*[not(namespace-uri()='http://www.w3.org/1999/XSL/Transform')]"/>
    <xsl:apply-templates select="@*[namespace-uri()='http://www.w3.org/1999/XSL/Transform']|*|text()|processing-instruction()|comment()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="@x:*"/>

<xsl:template match="*" mode="element">
  <xsl:copy>
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="x:block" mode="element">
  <xsl:apply-templates select="*|@x:*|text()|processing-instruction()|comment()"/>
</xsl:template>

<!-- <x:block><node/><node2/></x:block> = <node/><node2/> -->
<xsl:template match="x:block">
  <xsl:apply-templates select="*|@x:*|text()|processing-instruction()|comment()"/>
</xsl:template>

<!-- <node x:val="val" xsl:doe="yes"> = <node><xsl:value-of select="val" disable-output-escaping="yes"/></node> -->
<xsl:template match="@x:val|@x:value|@x:value-of">
  <xsl:element name="xsl:value-of" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute name="select"><xsl:value-of select="."/></xsl:attribute>
    <xsl:if test="../@x:doe or ../@x:disable-output-escaping"><xsl:attribute name="disable-output-escaping"><xsl:value-of select="../@x:doe|../@x:disable-output-escaping"/></xsl:attribute></xsl:if>
  </xsl:element>
</xsl:template>

<!-- <node x:apply="sel" xsl:mode="mode"> = <node><xsl:apply-templates select="sel" mode="mode"/></node> -->
<xsl:template match="@x:apply|@x:apply-templates|x:apply">
  <xsl:element name="xsl:apply-templates" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:if test="normalize-space(.)!=''"><xsl:attribute name="select"><xsl:value-of select="."/></xsl:attribute></xsl:if>
    <xsl:if test="../@x:mode"><xsl:attribute name="mode"><xsl:value-of select="../@x:mode"/></xsl:attribute></xsl:if>
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:element>
</xsl:template>

<!-- <node x:call="name"> = <node><xsl:call-template name="name"/></node> -->
<xsl:template match="@x:call|@x:call-template|x:call">
  <xsl:element name="xsl:call-template" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:if test="normalize-space(.)!=''"><xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute></xsl:if>
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:element>
</xsl:template>

<!-- <node x:text="text"> = <node>text</node> -->
<xsl:template match="@x:text">
  <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="@x:text[../@x:doe or ../@x:disable-output-escaping]">
  <xsl:element name="xsl:text" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute name="disable-output-escaping"><xsl:value-of select="../@x:doe|../@x:disable-output-escaping"/></xsl:attribute>
    <xsl:value-of select="."/>
  </xsl:element>
</xsl:template>

<!-- <node x:if="check"> = <xsl:if test="check"><node/></xsl:if> -->
<xsl:template match="*[@x:if|@x:test]">
  <xsl:element name="xsl:if" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute name="test"><xsl:value-of select="@x:if|@x:test"/></xsl:attribute>
    <xsl:apply-templates select="." mode="element"/>
  </xsl:element>
</xsl:template>

<!-- <x:for> = <xsl:for-each> -->
<xsl:template match="x:for|x:each">
  <xsl:element name="xsl:for-each" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:element>
</xsl:template>
<!-- <node x:each="item"> = <xsl:for-each select="item"><node/></xsl:for-each> -->
<xsl:template match="*[@x:each|@x:for|@x:for-each]">
  <xsl:element name="xsl:for-each" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute name="select"><xsl:value-of select="@x:each|@x:for|@x:for-each"/></xsl:attribute>
    <xsl:apply-templates select="." mode="element"/>
  </xsl:element>
</xsl:template>

<!-- <node x:if-attr="check" x:attr-class="odd"> = <node><xsl:if test="check"><xsl:attribute name="class">odd</xsl:attribute></xsl:if></node> -->
<xsl:template match="@x:if-attr">
  <xsl:element name="xsl:if" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute name="test"><xsl:value-of select="."/></xsl:attribute>
    <xsl:for-each select="../@x:*[starts-with(local-name(), 'attr-')]">
      <xsl:element name="xsl:attribute" namespace="http://www.w3.org/1999/XSL/Transform">
        <xsl:attribute name="name"><xsl:value-of select="substring(local-name(), 6)"/></xsl:attribute>
        <xsl:value-of select="."/>
      </xsl:element>
    </xsl:for-each>
  </xsl:element>
</xsl:template>

<!-- <node x:choose="">...</node> = <node><xsl:choose>...</xsl:choose></node> -->
<xsl:template match="*[@x:choose]">
  <xsl:copy>
    <xsl:apply-templates select="@*"/>
    <xsl:element name="xsl:choose" namespace="http://www.w3.org/1999/XSL/Transform">
      <xsl:apply-templates select="*|text()|processing-instruction()|comment()"/>
    </xsl:element>
  </xsl:copy>
</xsl:template>
<!-- <node x:when="check"> = <xsl:when test="check"><node/></xsl:when> -->
<xsl:template match="*[@x:when]">
  <xsl:element name="xsl:when" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:attribute name="test"><xsl:value-of select="@x:when"/></xsl:attribute>
    <xsl:apply-templates select="." mode="element"/>
  </xsl:element>
</xsl:template>
<!-- <node x:other=""> = <xsl:otherwise><node/></xsl:otherwise> -->
<xsl:template match="*[@x:other|@x:otherwise]">
  <xsl:element name="xsl:otherwise" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:apply-templates select="." mode="element"/>
  </xsl:element>
</xsl:template>

<!-- <node x:comment="text"> = <node><xsl:comment>text</xsl:comment> -->
<xsl:template match="@x:comment">
  <xsl:element name="xsl:comment" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:value-of select="."/>
  </xsl:element>
</xsl:template>

<!-- <x:pi name="name">...</x:pi> = <xsl:processing-instruction name="name">...</xsl:processing-instruction> -->
<xsl:template match="x:pi">
  <xsl:element name="xsl:processing-instruction" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:element>
</xsl:template>

<!-- <x:attr/> = <xsl:attribute/> -->
<xsl:template match="x:attr">
  <xsl:element name="xsl:attribute" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:element>
</xsl:template>

<!-- <x:with name="name"/> = <xsl:with-param/> -->
<xsl:template match="x:with">
  <xsl:element name="xsl:with-param" namespace="http://www.w3.org/1999/XSL/Transform">
    <xsl:apply-templates select="*|@*|text()|processing-instruction()|comment()"/>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>
